<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue的时候传入components选项</title>
    <script src="../../js/vue.js"></script>
</head>

<body>
    <!-- 
        关于VueComponent:
            1.school组件本质是一个名为VueComponent的构造函数，且不是程序员定义的，是Vue.extend生成的。
            2.我们只需要写<schoo1/>或<school></school>，Vue解析时会帮我们创建school组件的实例对象,即Vue帮我们执行的:newVueComponent(options)。
            3.特别注意:每次调用Vue.extend，返回的都是一个全新的VueComponent!!!!
            4.关于this指向:
                (1).组件配置中:
                    data函数、methods中的函数、watch中的函数、computed中的的数 它们的this均是【VueComponent实例对象】
                (2).new Vue(options)配置中:
                    data函数、methods中的函数、watch中的的数、computed中的的数 它们的this均是【Vue实例对象】
            5.VueComponent的实例对象，以后简称vc(也可称之为:组件实例对象)。
            Vue的实例对象，以后简称vm。
     -->
    <div id="app">
    </div>
    <script>
        Vue.config.productionTip = false

        // 定义student组件 (子组件)
        const student = {
            template: `
            <div>
                <h2>学生名称：{{name}}</h2>
                <h2>学生年纪{{age}}</h2>
            </div>
            `,
            data() {
                return {
                    name: "meo",
                    age: 18
                }
            }
        };
        // 定义school组件(父组件)
        const school = {
            name: 'atguigu',//vue的开发者工具中呈现的名字。一般第三方插件会用
            template: `
            <div class="school">
                <h2>学校名称：{{name}}</h2>
                <h2>学校地址：{{address}}</h2>
                <student></student>
            </div>
            `,
            data() {
                return {
                    name: "meo",
                    address: '上海'
                }
            },
            components: {
                student
            }
        };

        // 定义hello组件(和school同级)
        const hello = {
            template: `
            <div class="hello">
                <h2>{{msg}}</h2>
            </div>
            `,
            data() {
                return {
                    msg: "啊啦啦啦Hello组件"
                }
            }
        };
        //创建app组件
        const app = Vue.extend({
            template: `
                <div>
                    <school></school> 
                    <hello></hello> 
                </div>
            `,
            components: {
                school,
                hello
            }
        })
        const vm = new Vue({
            template: `
                <app></app>
            `,
            data() {
                return {}
            },
            // 局部注册
            components: {
                app
            }
        })
        vm.$mount("#app")
    </script>
</body>

</html>